home *** CD-ROM | disk | FTP | other *** search
- /*Clipboard I/O routines*/
-
- #define WCLIP_FIRST_WRITE 0
- #define WCLIP_CONT_WRITE 1
- #define WCLIP_LAST_WRITE 2
-
- SetupClipboard() /*Setup the clipboard device*/
- {
- if(OpenDevice("clipboard.device",0,&ClipboardIO,0)!=0)
- {
- TitleError("Can't open clipboard!\n");
- Delay(500); /*Pause for 5 seconds; get the user's attention*/
- CloseWindow(Window);
- CloseScreen(Screen);
- exit();
- }
-
- clipboardMsgPort.mp_Node.ln_Type=NT_MSGPORT;
- clipboardMsgPort.mp_Flags=0;
- clipboardMsgPort.mp_SigBit=AllocSignal(-1);
- clipboardMsgPort.mp_SigTask=(struct Task *)FindTask((char *)NULL);
- AddPort(&clipboardMsgPort);
- ClipboardIO.io_Message.mn_ReplyPort=(struct MsgPort *)&clipboardMsgPort;
- }
-
- WriteInvsTextToClip(StartLoc,Chars,String)
- int StartLoc,Chars; /*Write a highlighted text block to clipboard*/
- char *String;
- {
- char WorkString[80];
-
- strcpy(WorkString,"");
- strcpy(WorkString,&String[StartLoc]);
- WorkString[Chars]=NULL;
- WriteStringClip(WorkString);
- }
-
- WriteStringClip(string) /*Write a string to the Clipboard*/
- char *string;
- {
- int len;
-
- /*Write the data, in IFF form*/
- WriteClip(&ClipboardIO,"FORM",4,WCLIP_FIRST_WRITE);
- len=strlen(string)+12;
- WriteClip(&ClipboardIO,&len,4,WCLIP_CONT_WRITE);
- WriteClip(&ClipboardIO,"FTXT",4,WCLIP_CONT_WRITE);
- WriteClip(&ClipboardIO,"CHRS",4,WCLIP_CONT_WRITE);
- len=strlen(string);
- WriteClip(&ClipboardIO,&len,4,WCLIP_CONT_WRITE);
- WriteClip(&ClipboardIO,string,len,WCLIP_LAST_WRITE);
- }
-
- WriteClip(ioreq,buf,bufsiz,whichone) /*Writes a clip to the clipboard*/
- register struct IOClipReq *ioreq;
- char *buf;
- int bufsiz;
- int whichone;
- {
- if(whichone==WCLIP_FIRST_WRITE) /*First time*/
- {
- ioreq->io_Offset=0;
- ioreq->io_ClipID=0;
- }
- ioreq->io_Command=CMD_WRITE;
- ioreq->io_Data=buf;
- ioreq->io_Length=bufsiz;
- DoIO(ioreq);
- if(whichone==WCLIP_LAST_WRITE) /*Last time, tell clipboard to make the*/
- { /*data available to the system*/
- ioreq->io_Command=CMD_UPDATE;
- DoIO(ioreq);
- }
- }
-
- ShutDownClipboard()
- {
- RemPort(&clipboardMsgPort);
- CloseDevice(&ClipboardIO);
- }
-
- ReadItemString(Start,Len,string)
- int Start,Len; /*Read a string from the clipboard and put it into*/
- char *string; /*the specified string*/
- {
- char WorkString[80];
- char TmpString[80];
-
- strcpy(TmpString,"");
- strcpy(WorkString,"");
-
- ReadString(WorkString,79);
- strcpy(TmpString,string);
- TmpString[Start]=NULL;
- strcat(TmpString,WorkString);
- strncat(TmpString,&string[Start],79-strlen(TmpString));
-
- TmpString[79]=NULL;
- strcpy(string,TmpString);
- }
-
- ReadString(string,len) /*Read a string from the Clipboard*/
- char *string;
- int len;
- {
- char WorkingString[80];
- int length;
-
- strcpy(WorkingString,"");
-
- length=ReadClip(&ClipboardIO,WorkingString,79);
- if(!strncmp("FTXT",WorkingString,4))
- return(FALSE);
- strcpy(string,&WorkingString[20]);
- string[20+len]=NULL;
- return(TRUE);
-
- }
-
- ReadClip(ioreq,buf,bufsiz)
- register struct IOClipReq *ioreq;
- char *buf; /*Read data from the Clipboard*/
- int bufsiz;
- {
- int length;
-
- ioreq->io_Command=CMD_READ;
- ioreq->io_Data=buf;
- ioreq->io_Length=bufsiz-1;
- ioreq->io_Offset=0;
- ioreq->io_ClipID=0;
-
- DoIO(ioreq);
-
- length=ioreq->io_Actual;
- *(buf+length)='\0';
-
- if(ioreq->io_Actual <(bufsiz-1))
- {
- ioreq->io_Command=CMD_READ;
- ioreq->io_Length=1;
- ioreq->io_Data=NULL;
- DoIO(ioreq);
- }
- return(length);
- }
-
- SnagBlock(Source,Last) /*Copy block of lines into clip (non-clipboard)*/
- struct LineItem *Source,*Last;
- {
- struct LineItem *Dest;
-
- ClipStart=ClipEnd=(struct LineItem *)NULL;
-
- ClipStart=ClipEnd=Dest=(struct LineItem *)InsertItem(NULL,NULL);
- Dest->Level=Source->Level;
- strcpy(Dest->Text,Source->Text);
- Source=(struct LineItem *)Source->NextItem;
-
- while(Source != Last->NextItem)
- {
- ClipEnd=Dest=(struct LineItem *)InsertItem(NULL,Dest);
- Dest->Level=Source->Level;
- strcpy(Dest->Text,Source->Text);
- Source=(struct LineItem *)Source->NextItem;
- }
- }
-
- AddBlock(Start) /*Insert a SnagBlocked item list into the main list*/
- struct LineItem *Start; /*starting at Start*/
- {
- struct LineItem *Item,*Dest;
- int TempX,TempY;
- UBYTE OrigLevel;
-
- Item=(struct LineItem *)ClipStart;
- Dest=(struct LineItem *)InsertItem(Start->NextItem,Start);
- OrigLevel=Item->Level;
- Dest->Level=5;
- Dest->ItemNumber=Item->ItemNumber;
- strcpy(Dest->Text,Item->Text);
-
- for(;Dest->Level > OrigLevel;Dest->Level--)
- {
- AddItem(Dest);
- RemItem(Dest);
- }
- AddItem(Dest);
- AddItem(Dest->NextItem);
-
- Item=(struct LineItem *)ClipStart->NextItem;
- while(Item != NULL)
- {
- Dest=(struct LineItem *)InsertItem(Dest->NextItem,Dest);
- Dest->Level=Item->Level;
- Dest->ItemNumber=Item->ItemNumber;
- strcpy(Dest->Text,Item->Text);
- AddItem(Dest);
- Item=(struct LineItem *)Item->NextItem;
- }
- TempY=CurY;
- TempX=CurX;
- PrintItemList(CurrentItem,CurY);
- PlotCursor(TempX,TempY);
- }
-
-
-